package com.obelisco.vista.seguridad;

import java.util.Iterator;
import java.util.ResourceBundle;
import java.util.Vector;

import com.obelisco.modelo.data.CarpetaTransaccion;
import com.obelisco.modelo.data.Transaccion;
import com.obelisco.modelo.data.Usuario;
import com.obelisco.modelo.servicios.seguridad.IServicioDatosUsuario;
import com.obelisco.modelo.servicios.seguridad.IServicioSeguridad;
import com.obelisco.vista.componentes.DialogoError;

import nextapp.echo2.app.ContentPane;
import nextapp.echo2.app.Row;
import nextapp.echo2.app.layout.ColumnLayoutData;
import nextapp.echo2.app.Insets;
import nextapp.echo2.app.Extent;
import nextapp.echo2.app.Label;
import nextapp.echo2.app.layout.RowLayoutData;
import nextapp.echo2.app.TextField;
import nextapp.echo2.app.Button;
import nextapp.echo2.app.ResourceImageReference;
import nextapp.echo2.app.event.ActionEvent;
import nextapp.echo2.app.event.ActionListener;

public class BarraEjecucion extends ContentPane {

	private ResourceBundle resourceBundle;
	
	private Vector<EjecutarListener> listeners = new Vector<EjecutarListener>();
	
	private IServicioSeguridad servicioSeguridad;

	private TextField txtAcceso;
	
	private Usuario usuario;
	/**
	 * Creates a new <code>BarraEjecutarTransaccion</code>.
	 */
	public BarraEjecucion() {
		super();

		// Add design-time configured components.
		initComponents();
	}

	public void addEjecutarListener(EjecutarListener listener) {
		listeners.add(listener);
	}

	public void removeEjecutarListener(EjecutarListener listener) {
		listeners.remove(listener);
	}

	public void distribuirEventoTransaccion(Transaccion t) {

		for (Iterator i = listeners.iterator(); i.hasNext();) {
			EjecutarListener l = (EjecutarListener) i.next();
			l.onClickTransaccion(t);
		}

	}

	public void distribuirEventoCarpeta(CarpetaTransaccion c) {

		for (Iterator i = listeners.iterator(); i.hasNext();) {
			EjecutarListener l = (EjecutarListener) i.next();
			l.onClickCarpeta(c);
		}

	}

	private void accionEjecutar(ActionEvent e) {
		//TODO Implement.
		Transaccion t = servicioSeguridad.buscarTransaccion(txtAcceso.getText());
		if (t != null) {
			distribuirEventoTransaccion(t);
		} else {
			DialogoError.mostrar("Error", "NO existe una Transaccion con el Acceso Directo Proporcionado");
		}
	}

	/**
	 * Configures initial state of component.
	 * WARNING: AUTO-GENERATED METHOD.
	 * Contents will be overwritten.
	 */
	private ActionListener ejecutarListener = new ActionListener() {
		public void actionPerformed(ActionEvent e) {
			accionEjecutar(e);
		}
	};
	
	private void initComponents() {
		this.setStyleName("Obelisco.BarraEjecucion");
		Row row1 = new Row();
		ColumnLayoutData row1LayoutData = new ColumnLayoutData();
		row1LayoutData.setInsets(new Insets(new Extent(5, Extent.PX),
				new Extent(10, Extent.PX)));
		row1.setLayoutData(row1LayoutData);
		add(row1);
		Label label2 = new Label();
		label2.setText("Ir a:  ");
		RowLayoutData label2LayoutData = new RowLayoutData();
		label2LayoutData.setInsets(new Insets(new Extent(5, Extent.PX),
				new Extent(5, Extent.PX)));
		label2.setLayoutData(label2LayoutData);
		row1.add(label2);
		txtAcceso = new TextField();
		txtAcceso.setStyleName("Default");
		RowLayoutData textField1LayoutData = new RowLayoutData();
		textField1LayoutData.setInsets(new Insets(new Extent(5, Extent.PX),
				new Extent(5, Extent.PX), new Extent(0, Extent.PX), new Extent(
						5, Extent.PX)));
		txtAcceso.setLayoutData(textField1LayoutData);
		txtAcceso.addActionListener(this.ejecutarListener);
		row1.add(txtAcceso);
		Button btnEjecutar = new Button();
		btnEjecutar.setStyleName("Obelisco.Boton.Ejecutar");
		btnEjecutar.addActionListener(this.ejecutarListener);
		row1.add(btnEjecutar);
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public IServicioSeguridad getServicioSeguridad() {
		return servicioSeguridad;
	}

	public void setServicioSeguridad(IServicioSeguridad servicioSeguridad) {
		this.servicioSeguridad = servicioSeguridad;
	}

}
